#ifndef STORAGE_CONNECTION_CONFIG_FACTORY_HPP
#define STORAGE_CONNECTION_CONFIG_FACTORY_HPP

#include "Storage/StorageConfig.hpp"
#include <string>
#include <list>

namespace Storage
{

class ConnectionConfig;

/// @ingroup Storage
/// @brief It is the abstract factory to be used for creating connection configurations, based on a given type name.
class STORAGE_API ConnectionConfigFactory
{
public:
	/// @brief It creates the connection configuration corresponding to the provided type name, using the name of the 
	///	connection as initialization data.
	/// @param typeName the name of the connection type.
	/// @param connName the name of the connection.
	virtual ConnectionConfig* createConfig( const std::string& typeName, const std::string& connName) = 0;

	/// @brief It adds to the specified list the names of the connection types supported.
	virtual void registeredConnectionTypes( std::list< std::string>& typeList );
};

} // namespace Storage

#endif // STORAGE_CONNECTION_CONFIG_FACTORY_HPP
